//
//  main.m
//  block01
//
//  Created by 李煜 on 2023/3/1.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
  @autoreleasepool {
// <#returnType#> (^<#blockName#>)(<#arguments#>);
//    一.block声明
    int (^firstBlock)(NSString *param1,int param2);
    void (^showName)(NSString *myName);
    NSDate *(^whatDayIsIt)(void);
    void (^allVoid)(void);
    NSString *(^composeName) (NSString *firstName, NSString *lastName);
//    firstBlock(@"1",2);❌ 无定义

//    参数可以写参数名称也可以不写,建议写参数名称
//    等价如下写法:
//    int (^firstBlock) (NSString *, int );
//    void (^showName)(NSString *);
//    NSDate *(^whatDayIsIt) (void);
//    void (^allVoid)(void);
//    NSString *(^composeName) (NSString *, NSString *);


//    二.定义
//    1.定义必须写参数名
//    2.参数类型和顺序必须和声明一致
//    3.必须省略返回值和block名称
    ^(int a, int b) {
      int result = a * b;
      return result;
    };
//    三.做函数参数和返回值
  }
  return 0;
}
